#!/user/bin/python3
import sys


""" 
end 关键字
关键字end可以用于将结果输出到同一行，或者在输出的末尾添加不同的字符，实例如下：
"""
a, b = 0, 1
while b < 1000:
    print(b, end=",")
    a, b = b, a+b


# if控制
a = 1
while a < 10:
    if a % 2 == 0:
        print(a, "is even")
    else:
        print(a, "is old")
    a += 1


# 迭代器和生成器
list = [1, 5, 36, 9, 0]
it = iter(list)  # 创建迭代器对象
print(next(it))  # 1
print(next(it))  # 5

# 常规遍历
for x in list:
    print(x, end=",")  # 1 5 36 9 0

for x in it:
    print(x, end=",")  # 36 9 0

print(" ")
# 也可以使用迭代器
""" it_2 = iter(list)
while True : 
    try :
        print(next(it_2))
    except StopIteration :
        sys.exit() """

# 把一个类作为一个迭代器


class NumberAdd:
    def __iter__(self):
        self.a = 1
        return self

    def __next__(self):
        x = self.a
        self.a += 1
        return x


myNumber = NumberAdd()
myIter = iter(myNumber)
print(next(myIter))
print(next(myIter))
print(next(myIter))
print(next(myIter))
print(next(myIter))
print(next(myIter))


# 生成器  生成器是一个返回迭代器的函数，只能用于迭代操作，更简单点理解生成器就是一个迭代器。
# 在调用生成器运行的过程中，每次遇到 yield 时函数会暂停并保存当前所有的运行信息，返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行

def fibonacci(n):
    a, b, counter = 0, 1, 0
    while True:
        if counter > n:
            return
        yield a
        a, b = b, a + b
        counter += 1


f = fibonacci(10)
while True:
    try:
        print(next(f), end=" ")
    except StopIteration:
        sys.exit()
